package com.msf.tutorial.java8.chapter1;

import com.msf.tutorial.java8.Apple;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 第二种状态：把颜色作为参数
 *
 * 优点：
 * 能够灵活地应对颜色的变化
 *
 * 缺点：
 * 仅仅能够应对颜色的变化而已，如果有其他方面的需求，如重量，则不能应对
 *
 * 当然，可以在filterApples方法后面多加几个参数，将所有能想到的属性都加上，但是这种编码方式非常笨拙
 *
 * 需求变更：
 * 需要对重量也进行筛选
 */
public class Step2 {

    /**
     * 把颜色作为参数
     *
     * @param inventory
     * @return
     */
    public static List<Apple> filterApples(List<Apple> inventory, String color) {
        List<Apple> result = new ArrayList<>();
        for (Apple apple: inventory) {
            if ( color.equals(apple.getColor())) {
                result.add(apple);
            }
        }
        return result;
    }

    public static void main(String[] args) {

        List<Apple> list = Arrays.asList(
            new Apple(1L, "red", 1D),
            new Apple(2L, "red", 2D),
            new Apple(3L, "green", null),
            new Apple(1L, "green", 3D)
        );

        List<Apple> greenApples = filterApples(list, "green");
        List<Apple> redApples = filterApples(list, "red");

        System.out.println(greenApples);
        System.out.println(redApples);
    }

}
